package com.qf.controller;

import com.qf.pojo.User;
import com.qf.service.UserService;
import com.qf.service.UserServiceImpl;
import com.qf.utils.Constants;
import com.qf.utils.StrUtils;
import org.apache.commons.beanutils.BeanUtils;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;

/**
 * @author 86199
 * @version V1.0
 * @Project jqueryDemo
 * @Package com.qf.controller
 * @Descriptio"n:
 * @Date 2022/5/24 21:22
 */
@WebServlet("/user")
public class UserController extends BaseServlet{
    /**
     * 消费者Controller,控制层
     * @param request
     * @param response
     */
    public  void check(HttpServletRequest request, HttpServletResponse response)throws Exception{
        //1. 接收用户名参数
        String username = request.getParameter("username");

        //2. 调用service，到数据库查询这个用户是否存在，如果存在，那么这个用户不可用，如果不存在，用户名可用
        UserService userService = new UserServiceImpl();
        boolean check =userService.check(username);
        //3. 将是否可用信息返回给页面展示
        if (check){
            // 用户名
            response.getWriter().write(Constants.NOT_HAS_USER);
        }else {
            response.getWriter().write(Constants.HAS_USER);
        }
    }
    /**
     * 消费者用户登录
     *
     */
     public String login (HttpServletRequest request,HttpServletResponse response ) {
         //1. 获取用户名参数
         String username = request.getParameter("username");
         //2. 获取用户名密码参数
         String password = request.getParameter("password");
         //3. 获取用户名验证码参数
         String code = request.getParameter("code");
         //4. 获取用户是否要自动登录
         String auto = request.getParameter("auto");

         //5. 判断用户名， 密码，验证码不为空 ，如果为空重定向到登录页面
         if(!StrUtils.empty(username) || !StrUtils.empty(password) || !StrUtils.empty(code)){
             request.setAttribute("msg","用户名,密码,验证码不可以为空！");
             //跳转到登录页面
             return  "forward:/login.jsp";



         }

         //6. 校验验证码是否正确，不正确重定向到登录页面重新登录

         String sessionCode= (String)request.getSession().getAttribute("code");
         if(!code.equalsIgnoreCase(sessionCode)){
             request.setAttribute("userName",username);
             request.setAttribute("password",password);
             request.setAttribute("msg","验证码错误！");
            return "forward:/login.jsp";
         }
        //7. 调用service完成用户名密码的校验
         UserService userService = new UserServiceImpl();
         User user = userService.login(username, password);
         //8.判断用户名，密码是否错误，如果错误返回提示信息
         if (user==null){
            request.setAttribute("userName",username);
            request.setAttribute("password",password);
            request.setAttribute("msg","用户名活着和密码错误");
            //跳转到登录页面
            return  "forward:/login.jsp";


         }
         //9. 登陆成功，将用户名放入到Tomcat的session会话中携带
         request.getSession().setAttribute("loginUser",user);

         //10.
        if ("on".equals(auto)) {
        Cookie cookie = new Cookie(Constants.AUTO_NAME, user.getUsername());
        //设置这个cookie保存的路径
        cookie.setPath("/");
        //设置cookie保存数据的时间
        cookie.setMaxAge(60 * 60 * 24 * 14);
        //通过响应将cookie数据写回到浏览器中保存
        response.addCookie(cookie);
    }

    //11. 跳转到首页
         return "redirect:/goods?method=index";
     }

    /**
     * 消费者新用户注册
     * @param request
     * @param response
     * @return
     */
    public String register(HttpServletRequest request, HttpServletResponse response) throws Exception{
        //1. 获取页面传入的所有参数, key就是页面input框的name属性, value就是input框中输入的值
        Map<String, String[]> parameterMap = request.getParameterMap();

        //2. 将参数封装成User对象
        //创建用户对象
        User user = new User();
        //利用beanUtils工具类, 将map中的数据全部自动set到user对象中
        //使用要求: user对象的属性名必须和页面input框的name属性一致, 实体类必须实现Serializable序列化接口
        BeanUtils.populate(user, parameterMap);

        //3. 调用service, 将用户对象保存到mysql数据库的用户表中
        UserService userService = new UserServiceImpl();
        int count = userService.createUser(user);

        //4. 跳转到注册成功页面
        if (count > 0) {
            //注册成功
            return "redirect:/registerSuccess.jsp";
        } else {
            //注册失败
            return "redirect:/register.jsp";
        }
    }
}
